Condividi tramite


Classe System.Collections.Generic.HashSet<T>

Questo articolo fornisce osservazioni supplementari alla documentazione di riferimento per questa API.

La HashSet<T> classe fornisce operazioni di set ad alte prestazioni. Un set è una raccolta che non contiene elementi duplicati e i cui elementi non sono in un ordine particolare.

La capacità di un HashSet<T> oggetto è il numero di elementi che l'oggetto può contenere. La capacità di un HashSet<T> oggetto aumenta automaticamente man mano che gli elementi vengono aggiunti all'oggetto.

La HashSet<T> classe si basa sul modello di set matematici e fornisce operazioni set ad alte prestazioni simili all'accesso alle chiavi delle Dictionary<TKey,TValue> raccolte o Hashtable . In termini semplici, la HashSet<T> classe può essere considerata come una Dictionary<TKey,TValue> raccolta senza valori.

Una HashSet<T> raccolta non è ordinata e non può contenere elementi duplicati. Se la duplicazione dell'ordine o dell'elemento è più importante delle prestazioni per l'applicazione, è consigliabile usare la List<T> classe insieme al Sort metodo .

HashSet<T> fornisce molte operazioni di set matematico, ad esempio l'aggiunta di set (unioni) e la sottrazione di set. Nella tabella seguente sono elencate le operazioni fornite HashSet<T> e i relativi equivalenti matematici.

Operazione HashSet Equivalente matematico
UnionWith Unione o aggiunta di set
IntersectWith Intersezione
ExceptWith Imposta sottrazione
SymmetricExceptWith Differenza simmetrica

Oltre alle operazioni set elencate, la HashSet<T> classe fornisce anche metodi per determinare l'uguaglianza dei set, la sovrapposizione di set e se un set è un subset o un superset di un altro set.

Solo .NET Framework: per oggetti di dimensioni molto grandi HashSet<T> , è possibile aumentare la capacità massima a 2 miliardi di elementi in un sistema a 64 bit impostando l'attributo enabled dell'elemento <gcAllowVeryLargeObjects> di configurazione su true nell'ambiente di runtime.

La classe HashSet<T> implementa l'interfaccia ISet<T>.

Operazioni del set HashSet e LINQ

LINQ fornisce l'accesso Distinctalle operazioni , Union, Intersecte Except set su qualsiasi origine dati che implementa le IEnumerable interfacce o IQueryable . HashSet<T> offre una raccolta più ampia e più affidabile di operazioni set. Ad esempio, HashSet<T> fornisce confronti come IsSubsetOf e IsSupersetOf.

La differenza principale tra le operazioni e HashSet<T> le operazioni del set LINQ consiste nel fatto che le operazioni del set LINQ restituiscono sempre una nuova IEnumerable<T> raccolta, mentre i HashSet<T> metodi equivalenti modificano la raccolta corrente.

In genere, se è necessario creare un nuovo set o se l'applicazione necessita dell'accesso solo alle operazioni del set fornite, l'uso delle operazioni del set LINQ su qualsiasi IEnumerable<T> raccolta o matrice sarà sufficiente. Tuttavia, se l'applicazione richiede l'accesso a operazioni set aggiuntive o se non è consigliabile o necessario creare una nuova raccolta, usare la HashSet<T> classe .

La tabella seguente illustra le operazioni e le HashSet<T> operazioni del set LINQ equivalenti.

Operazione HashSet Equivalente LINQ
UnionWith Union
IntersectWith Intersect
ExceptWith Except
Non specificato. Distinct
SymmetricExceptWith Non specificato.
Overlaps Non specificato.
IsSubsetOf Non specificato.
IsProperSubsetOf Non specificato.
IsSupersetOf Non specificato.
IsProperSupersetOf Non specificato.
SetEquals Non specificato.